import { reqAddOrUpdateShopCart, reqDeleteAllShopCart, reqDeleteShopCart, reqShopCartList, reqUpdateAllIsChecked, reqUpdateOneIsChecked } from "@/api"

const state = {
  shopCartList:[]
}
const mutations = {
  RECEIVE_SHOPCARTLIST(state,shopCartList){
    state.shopCartList = shopCartList
  }
}
const actions = {

  // async函数  异步函数  函数内部一定有异步操作
  // async函数返回值一定是promise对象，不看return
  // promise对象是有状态和结果的，这个promise是成功还是失败 要看return
  
  // return的值： promise对象   非promise对象
  // 如果return后面是一个非promise的值  
      // 1、返回正常值  那就代表async函数返回的promise是成功的，成功的结果就是return返回的值
      // 2、抛异常  throw new Error('失败') 代表async函数返回的promise是失败的，失败的原因就是你抛出的失败原因

  // 如果return后面是一个promise的值
      // 1、返回的是成功的promise  那么代表async函数返回的promise是成功的，成功的结果是return后面返回的promise成功的结果
      // 2、返回的是失败的promise  那么代表async函数返回的promise是失败的，失败的原因是return后面返回的promise失败的原因

  async addOrUpdateShopCart({commit},{skuId,skuNum}){
    const result = await reqAddOrUpdateShopCart(skuId,skuNum)
    if(result.code === 200){
      return 'ok'
    }else{
      return Promise.reject(new Error('failed'))
    }
  },

  async getShopCartList({commit}){
    const result = await reqShopCartList()
    if(result.code === 200){
      commit('RECEIVE_SHOPCARTLIST',result.data)
    }
  },

  //请求修改单个的选中状态
  async updateOneIsChecked({commit},{skuId,isChecked}){
    const result = await reqUpdateOneIsChecked(skuId,isChecked)
    if(result.code === 200){
      return 'ok'
    }else{
      return Promise.reject(new Error('failed'))
    }
  },


  //请求修改多个的选中状态
  async updateAllIsChecked({commit},{isChecked,skuIds}){
    const result = await reqUpdateAllIsChecked(isChecked,skuIds)
    if(result.code === 200){
      return 'ok'
    }else{
      return Promise.reject(new Error('failed'))
    }
  },

  // 请求删除单个的购物车
  async deleteOneShopCart({commit},skuId){
    const result = await reqDeleteShopCart(skuId)
    if(result.code === 200){
      return 'ok'
    }else{
      return Promise.reject(new Error('failed'))
    }
  },

  //请求删除多个购物车
  async deleteAllShopCart({commit},skuIds){
    const result = await reqDeleteAllShopCart(skuIds)
    if(result.code === 200){
      return 'ok'
    }else{
      return Promise.reject(new Error('failed'))
    }
  },


}
const getters = {}

export default {
  state,
  mutations,
  actions,
  getters
}